\lstdefinelanguage{VDM++}
  {morekeywords={\#act, \#active, \#fin, \#req, \#waiting, abs, all, allsuper, always, and, answer, 
     assumption, async, atomic, be, bool, by, card, cases, char, class, comp, compose, conc, cycles,
     dcl, def, del, dinter, div, do, dom, dunion, duration, effect, elems, else, elseif, end,
     error, errs, exists, exists1, exit, ext, floor, for, forall, from, functions, 
     general, hd, if, in, inds, init, inmap, input, instance, int, inter, inv, inverse, iota, is, 
     isofbaseclass, isofclass, inv, inverse, lambda, let, map, mu, mutex, mod, nat, nat1, new, merge, 
     munion, not, of, operations, or, others, per, periodic, post, power, pre, pref, 
     private, protected, public, qsync, rd, responsibility, return, reverse, samebaseclass, 
     sameclass, psubset, rem, rng, sel, self, seq, seq1, set, skip, specified, st, 
     start, startlist, static, subclass, subset, subtrace, sync, synonym, then, thread, 
     threadid, time, tixe, tl, to, token, trap, types, undefined, union, using, values, 
     variables, while, with, wr, yet, RESULT, false, true, nil, periodic pref, rat, real},
   %keywordsprefix=mk\_,
   %keywordsprefix=a\_,
   %keywordsprefix=t\_,
   %keywordsprefix=w\_,
   sensitive,
   morecomment=[l]--,
   morestring=[b]",
   morestring=[b]',
  }[keywords,comments,strings]
\lstdefinelanguage{JavaCC}
  {morekeywords={options, PARSER\_BEGIN, PARSER\_END, SKIP, TOKEN},
   sensitive=false,
  }[keywords]
